package org.xx.armory.objectparser;

/**
 * 从源文件中解析得到的对象的构造器。
 *
 * @param <T>
 *         构造器能构造的对象类型。
 * @author Haart
 */
public abstract class ParsedObjectBuilder<T extends ParsedObject> {
    private LineInfo lineInfo;

    /**
     * 获取源文件中的位置信息。
     *
     * @return 源文件中的位置信息。
     */
    protected final LineInfo getLineInfo() {
        return this.lineInfo;
    }

    /**
     * 设置源文件中的位置信息。
     *
     * @param lineInfo
     *         源文件中的位置信息。
     * @return 此构造器本身。
     */
    public final ParsedObjectBuilder<T> setLineInfo(final LineInfo lineInfo) {
        this.lineInfo = lineInfo;
        return this;
    }

    /**
     * 执行构造器, 得到解析对象。
     *
     * @return 从源文件中解析得到的对象。
     */
    public abstract T build();
}
